package com.insight.dto.graph;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * 表关系图DTO
 * 包含节点和边的完整关系图
 *
 * @author Insight Team
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RelationshipGraph {

    /**
     * 所有节点(表)
     */
    @Builder.Default
    private List<GraphNode> nodes = new ArrayList<>();

    /**
     * 所有边(外键关系)
     */
    @Builder.Default
    private List<GraphEdge> edges = new ArrayList<>();

    /**
     * 中心节点ID(如果是单表查询)
     * null表示数据源级别的全局关系图
     */
    private Long centerNodeId;

    /**
     * 数据源ID
     */
    private Long dataSourceId;

    /**
     * 最大遍历深度
     */
    private Integer maxDepth;

    /**
     * 图统计信息
     */
    private GraphStatistics statistics;

    /**
     * 图统计信息内部类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class GraphStatistics {
        /**
         * 总表数
         */
        private Integer totalTables;

        /**
         * 总关系数
         */
        private Integer totalRelationships;

        /**
         * 孤立表数(无任何关系)
         */
        private Integer isolatedTables;

        /**
         * 根表数(只被引用,不引用其他表)
         */
        private Integer rootTables;

        /**
         * 叶子表数(只引用其他表,不被引用)
         */
        private Integer leafTables;
    }
}
